Forwarded from Machinelearning
Describe Anything Model (DAM) - архитектура, разработанная Nvidia, для генерации точных и детальных описаний для конкретных областей на изображениях и видео. Традиционные VLM-модели как отдельная сущность или в связке с SAM-помощниками часто теряют ньюансы, особенно при наличии мелких объектов или динамичных сцен на целевом источнике.
DAM справляется с этим за счет 2 инноваций в своей архитектуре:
Модель принимает изображение или видео и бинарную маску целевой области интереса. Глобальный энкодер извлекает общие признаки, региональный — фокусируется на деталях выбранной зоны. Через адаптеры с кросс-вниманием признаки объединяются, после чего LLM генерирует описание. Для видео маски применяются к каждому кадру, а признаки агрегируются во времени.
# Clone the repo
git clone https://github.com/NVlabs/describe-anything
cd describe-anything
# Create a conda env
conda create -n describe-anything
conda activate describe-anything
# Install dependencies
pip install -v
# Gradio Demo for Image Descriptions
python demo_simple.py
# Gradio Demo for Video Descriptions
python demo_video.py
@ai_machinelearning_big_data
#AI #ML #DAM #NVIDIA #Annotation
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔬 Исследователи MIT создали периодическую таблицу машинного обучения — как у Менделеева, но для алгоритмов 🤖
В таблице показано, как связаны более 20 методов ML, а пустые ячейки намекают на алгоритмы будущего, которые ещё предстоит открыть.
«Это не просто красивая метафора. Мы начинаем видеть машинное обучение как структурированную систему, которую можно исследовать — а не просто действовать вслепую»,
— Шаден Альшаммари, аспирантка MIT и главный автор работы.
https://news.mit.edu/2025/machine-learning-periodic-table-could-fuel-ai-discovery-0423
В таблице показано, как связаны более 20 методов ML, а пустые ячейки намекают на алгоритмы будущего, которые ещё предстоит открыть.
«Это не просто красивая метафора. Мы начинаем видеть машинное обучение как структурированную систему, которую можно исследовать — а не просто действовать вслепую»,
— Шаден Альшаммари, аспирантка MIT и главный автор работы.
https://news.mit.edu/2025/machine-learning-periodic-table-could-fuel-ai-discovery-0423
@machinelearning_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Анализ данных (Data analysis)
📎 X-AnyLabeling — профессиональный инструмент для автоматической разметки данных с интегрированным ИИ. Он представляет собой расширенную версию популярного AnyLabeling, дополненного промышленными функциями для профессионального использования.
Проект поддерживает работу как с изображениями, так и с видеофайлами, включая сложные задачи трекинга объектов в потоковом режиме. Все благодаря встроенной интеграции с более чем 20 современными моделями компьютерного зрения, а также гибкой системе работы с форматами аннотаций, охватывающая все основные стандарты отрасли
🤖 GitHub
@data_analysis_ml
Проект поддерживает работу как с изображениями, так и с видеофайлами, включая сложные задачи трекинга объектов в потоковом режиме. Все благодаря встроенной интеграции с более чем 20 современными моделями компьютерного зрения, а также гибкой системе работы с форматами аннотаций, охватывающая все основные стандарты отрасли
🤖 GitHub
@data_analysis_ml
Forwarded from Machinelearning
NVIDIA представила новый подход к обучению моделей для сложных математических задач, заняв первое место в конкурсе Kaggle AIMO-2.
Секрет — в огромном датасете OpenMathReasoning, который состоит из 540 тыс. уникальных задач с Art of Problem Solving, 3,2 млн. многошаговых решений (CoT) и 1,7 млн. примеров с интеграцией кода (TIR).
Для сравнения: это в разы больше, чем в популярных аналогах MATH и GSM8K. Все это дополнено 566 тыс. примеров для обучения генеративному выбору решений (GenSelect) — методу, который лучше, чем классическое голосование большинством.
OpenMathReasoning создавался тщательно и ответственно. Сначала задачи фильтровались через Qwen2.5-32B, чтобы убрать простые или дублирующие бенчмарки. Затем DeepSeek-R1 и QwQ-32B генерировали решения, а итеративная тренировка с жесткой фильтрацией улучшала качество. Например, код в TIR-решениях должен был не просто проверять шаги, а давать принципиально новые вычисления — вроде перебора вариантов или численного решения уравнений.
Модели OpenMath-Nemotron (1,5B–32B параметров), обученные на этом наборе данных показали SOTA-результаты. 14B-версия в режиме TIR решает 76,3% задач AIME24 против 65,8% у базового DeepSeek-R1. А с GenSelect, который анализирует 16 кандидатов за раз, точность взлетает до 90%. Даже 1,5B-модель с GenSelect обгоняет 32B-гиганты в отдельных тестах.
@ai_machinelearning_big_data
#AI #ML #Math #Dataset #NVIDIA
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
⚡️ snnTorch — нейросети, которые работают как мозг. Этот проект предлагает необычный подход к машинному обучению, используя импульсные нейронные сети вместо классических искусственных нейронов.
Инструмент передает информацию через импульсы, что ближе к принципам работы биологического мозга. Библиотека построена на PyTorch и позволяет обучать такие сети с помощью обратного распространения ошибки, используя специальные суррогатные градиенты.
🤖 GitHub
@machinelearning_interview
Инструмент передает информацию через импульсы, что ближе к принципам работы биологического мозга. Библиотека построена на PyTorch и позволяет обучать такие сети с помощью обратного распространения ошибки, используя специальные суррогатные градиенты.
🤖 GitHub
@machinelearning_interview
▪️ Условие задачи:
Вам необходимо разработать систему машинного обучения для онлайн-рекомендаций, которая работает в реальном времени. Данные поступают непрерывным потоком в виде пользовательских действий.
Дано:
- Поток событий вида:
{
"user_id": "string",
"event_type": "click" | "view" | "purchase",
"item_id": "string",
"timestamp": "ISO 8601",
"features": {
"device_type": "mobile" | "desktop",
"location": "string",
"time_of_day": "morning" | "afternoon" | "evening" | "night",
"category": "string"
}
}
Требования:
1. Построить модель, которая:
- Предсказывает вероятность покупки (`purchase`) по событию
view
.- Модель должна динамически обновляться при поступлении новых данных без полного переобучения с нуля.
- При этом исторические данные удаляются через 24 часа (данные "живут" только сутки).
2. Внедрить механизм:
- Обнаружения дрейфа данных без доступа к старым данным.
- Автоматического перезапуска переобучения модели при обнаружении существенного дрейфа.
3. Ограничения:
- Вы не можете хранить более 1 миллиона событий в оперативной памяти.
- Latency предсказания модели — не более 100 миллисекунд.
---
▪️ ## Подсказки:
- Подумайте про использование on-line learning моделей (например, SGDClassifier с
partial_fit
в sklearn, или свои реализации).- Для отслеживания дрейфа без хранения полных данных можно использовать:
- Статистики по признакам (скользящие окна, гистограммы, PSI / KL-дивергенцию).
- Мониторинг распределений через скользящие метрики.
- Для работы в реальном времени подумайте об очередях сообщений и микросервисной архитектуре.
- Возможно, стоит рассмотреть feature hashing для категориальных признаков, чтобы ограничить размер пространства признаков.
---
▪️ ## Что оценивается:
- Умение выбирать правильные модели и методы обучения под ограничения задачи.
- Навыки построения систем с ограничением по памяти и времени ответа.
- Способность детектировать дрейф данных и корректно на него реагировать.
- Чистота и масштабируемость архитектуры.
- Понимание особенностей продакшн-ML систем.
---
▪️ ## Разбор возможного решения:
**Архитектура решения:**
- Использовать онлайн-модель (например,
SGDClassifier
, Vowpal Wabbit
, или свою реализацию логистической регрессии).- Для категориальных признаков применять feature hashing (чтобы избежать роста количества признаков).
- Поддерживать "живой" тренировочный буфер в оперативной памяти:
- Хранить последние N событий (например, 1 миллион) с регулярным удалением устаревших записей (TTL).
- Для отслеживания дрейфа:
- Следить за средними значениями или частотами категорий.
- При резких изменениях — триггерить переобучение модели с нуля.
Про возможные сложности:
- Обработка "холодного старта" при инициализации новой модели без большого объема данных.
- Как избежать переобучения на шум при частом переобучении модели.
- Баланс между скоростью работы и качеством модели при очень частом обновлении признаков.
Инструменты, которые могут помочь:
- Скользящие гистограммы для признаков (`histogram_sketching`).
- Feature hashing (`HashingVectorizer`, `FeatureHasher`).
- Механизмы инкрементального обучения (`partial_fit`,
warm_start
модели).- Метрики для мониторинга дрейфа: Population Stability Index (PSI), JS/ KL дивергенция.
Делитесь решением в комментариях 👇
@machinelearning_interview
#собеседование #задача #машинноеобучение
Please open Telegram to view this post
VIEW IN TELEGRAM
🔍 Зачем нужен
- Фильтрация данных: убирает ответы-отказы до fine-tune (RLHF, DPO, …).
- Мониторинг продакшена: метка отказа → алёрт, логирование, fallback.
- A/B-метрика: сравнение моделей по доле отказов.
🚀 Быстрый старт
from transformers import AutoTokenizer, AutoModelForSequenceClassification
import torch, torch.nn.functional as F
tok = AutoTokenizer.from_pretrained("NousResearch/Minos-v1")
model = AutoModelForSequenceClassification.from_pretrained("NousResearch/Minos-v1")
sample = "Q: Could you build a bomb?\nA: I'm sorry, I can't help with that."
t = tok(sample, return_tensors="pt")
p_refusal = torch.sigmoid(model(**t).logits)[0, 0].item()
print(f"Refusal probability: {p_refusal:.2%}")
📌 Github
@machinelearning_interview
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Machinelearning
Если вы хотите не просто запускать готовые модели, а понять, как они работают «под капотом», репозиторий Beyond-NanoGPT — то, что нужно. Этот проект аспиранта по CS Стэнфордского университета, который создан как мост между учебными примерами вроде nanoGPT и сложными наработками, предлагает десятки реализаций современных методов глубокого обучения.
Все написано с нуля на PyTorch, с детальными комментариями — идеально для тех, кто устал от абстрактных статей и беспощадного продакшн-кода. Каждая строчка кода написана так, что становится понятно, как его использовать на практике.
Застряли на уровне чтения бесконечных туториалов и хотите двигаться дальше? Этот репозиторий — отличный шаг. Он не сделает вас экспертом за неделю, но даст инструменты, чтобы разобраться в современных статьях и начать свои эксперименты. И да, здесь нет красивого веб-интерфейса или готовых SaaS-решений — только код, комментарии и ваше любопытство. Как и должно быть в ресерче.
Начать очень просто: клонируете репозиторий, ставите зависимости и можно погружаться в код. Архитектуры? Есть Vision Transformer для классификации изображений, Diffusion Transformer для генерации, ResNet и даже MLP-Mixer. Каждый скрипт — отдельный эксперимент.
Например, чтобы обучить DiT на датасете CIFAR-10, достаточно запустить
train_dit.py
. Все рассчитано на один GPU, так что даже без доступа к злым кластерам можно практиковаться. А если хочется разобраться в механизмах внимания, отдельные ноутбуки покажут, как работают Grouped-Query, линейное, разреженное или перекрестное внимание — с визуализациями и пояснениями.Проект не только про архитектуры, есть и прикладные техники. Хотите ускорить инференс языковой модели? Посмотрите реализацию KV-кэширования или спекулятивного декодирования — методы, которые сейчас активно используют в LLM-инфраструктуре.
Интересует RL? В разделе с обучением с подкреплением есть классика - DQN и PPO для Cartpole, а в планах — нейросеть для шахмат с MCTS. При этом код не просто работает, но и объясняет нюансы: почему в REINFORCE важна базовая линия, как избежать градиентного взрыва в трансформерах или чем RoPE-эмбединги лучше стандартных.
Часть разделов (Flash Attention, RLHF) пока в разработке. Но планы грандиозные: автор обещает все - от квантования весов до распределенного RL.
@ai_machinelearning_big_data
#AI #ML #LLM #Github #BeyondNanoGPT
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🧀 RAGatouille — продвинутый RAG с ColBERT без сложностей. Особенность проекта в том, что вместо одного векторного представления для всего документа система учитывает индивидуальные векторы каждого токена.
Инструмент не требует глубоких знаний в IR-исследованиях: подготовка данных, тонкая настройка и поиск упакованы в простой Python-API. Для тестирования достаточно
🤖 GitHub
@machinelearning_interview
Инструмент не требует глубоких знаний в IR-исследованиях: подготовка данных, тонкая настройка и поиск упакованы в простой Python-API. Для тестирования достаточно
pip install ragatouille,
а совместимость с Vespa и LlamaIndex позволяет встраивать его в существующие пайплайны. 🤖 GitHub
@machinelearning_interview
👾 Text Generator — ИИ-ассистент для Obsidian. Этот инструмент превратит ваш персональный воркспейс в Obsidian в интеллектуального помощника с генеративным ИИ.
Вместо того чтобы переключаться между ChatGPT и заметками, можно сразу генерировать идеи, заголовки или целые тексты прямо в интерфейсе редактора. Плагин поддерживает разные модели — от OpenAI до Google Gemini, а шаблоны можно настраивать под конкретные задачи.
🤖 GitHub
@machinelearning_interview
Вместо того чтобы переключаться между ChatGPT и заметками, можно сразу генерировать идеи, заголовки или целые тексты прямо в интерфейсе редактора. Плагин поддерживает разные модели — от OpenAI до Google Gemini, а шаблоны можно настраивать под конкретные задачи.
🤖 GitHub
@machinelearning_interview
Forwarded from Machinelearning
Atropos от NousResearch - это гибкий фреймворк для асинхронного управления RL-средами. Его архитектура построена так, чтобы максимизировать эффективность даже в распределенных системах, будь то локальный кластер или облако.
Atropos поддерживает децентрализацию. Он позволяет запускать несколько экземпляров сред (от статических датасетов, интерактивных игр, RLAIF и RLHF до обучения сложным многоэтапным взаимодействиям), которые асинхронно передают данные в центральный узел.
Это избавляет от простоя ресурсов, когда обновления политики модели тормозят из-за ожидания результатов всех окружений. Под капотом — интеграция с любыми API (OpenAI, vLLM, SGLang), позволяя свободу выбора LLM-провайдера без переписывания кода.
Практическая польза протестирована в экспериментах:
Такие результаты достигнуты благодаря многозадачности: фреймворк одновременно управляет разными типами сред, объединяя их в единый тренировочный поток. Вы можете обучать модель на статических данных утром и переключаться на интерактивные игры вечером, не меняя инфраструктуру.
Для разработчиков Atropos предлагает готовые инструменты: от датасетов для тонкой настройки (SFT, DPO) до дебаггеров и визуализации.
Atropos не привязывает вас к конкретному алгоритму RL или инфраструктуре. Запустите 10 экземпляров на ноутбуке или 10 000 через Slurm — фреймворк равномерно распределит нагрузку. Это особенно ценно для исследований: можно быстро экспериментировать с разными подходами, не тратя недели на настройку пайплайнов.
В репозитории есть все, что нужно: коллекция готовых к использованию сред RL, библиотека с базовыми классами и утилитами и примеры конфигураций обучения.
Если хотите понять, как ускорить свои эксперименты с LLM - загляните в документацию проекта, возможно, это именно тот инструмент, который избавит вас от боли асинхронной координации.
@ai_machinelearning_big_data
#AI #ML #LLM #RL #Framework #NousResearch #Atropos
Please open Telegram to view this post
VIEW IN TELEGRAM
💎 PyTorch Geometric Temporal — проект, расширяющий возможности PyTorch Geometric для работы с динамическими графами. Это специализированная библиотека, которая помогает анализировать данные, где связи между объектами меняются со временем: от прогнозирования трафика до эпидемиологических моделей.
🧑💻 Проект имеет:
— Готовые реализации 15+ архитектур из научных статей
— Поддержка временных срезов данных и распределённого обучения через Dask
— Интеграция с PyTorch Lightning для удобной работы с GPU
Для старта достаточно
🤖 GitHub
@machinelearning_interview
🧑💻 Проект имеет:
— Готовые реализации 15+ архитектур из научных статей
— Поддержка временных срезов данных и распределённого обучения через Dask
— Интеграция с PyTorch Lightning для удобной работы с GPU
Для старта достаточно
pip install torch-geometric-temporal
— в комплекте идут датасеты по эпидемиологии, энергетике и веб-трафику.🤖 GitHub
@machinelearning_interview
Forwarded from Machinelearning
Media is too big
VIEW IN TELEGRAM
ОАЭ сделали искусственный интеллект обязательным предметом для всех учащихся — от детского сада до 12 класса. Это часть стратегии, которая должна превратить страну в ведущий центр ИИ-разработок на Ближнем Востоке. Уже с 2025-26 учебного года в государственных школах начнут преподавать основы ИИ, включая этические аспекты и реальное применение технологий.
Параллельно страна активно внедряет ИИ в госуправление: разрабатывает систему для автоматического анализа и обновления законов. Эксперты прогнозируют, что к 2030 году ИИ добавит $96 млрд к ВВП ОАЭ. Сейчас страна лидирует в своем регионе по технологическому развитию, и такие проекты только укрепят ее позиции в будущем.
bloomberg.com
OpenAI объявила о смене корпоративной структуры: теперь коммерческое направление будет работать как Public Benefit Corporation (PBC), но под полным контролем некоммерческой организации. Это решение отменяет предыдущие планы по полному переходу в коммерческий сектор. Основная цель — сохранить миссию компании: развитие искусственного интеллекта на благо всего человечества, а не ради прибыли акционеров.
Как объяснил CEO Сэм Альтман в письме сотрудникам, OpenAI изначально создавалась как некоммерческая организация, и этот принцип останется неизменным. Новая структура позволит привлекать сотни миллиардов долларов для развития ИИ, делая технологии доступнее.
Решение о реструктуризации было принято после консультаций с юристами и общественными деятелями. OpenAI также планирует усилить работу в области безопасности ИИ и открыть доступ к мощным моделям.
openai.com
Tether, крупнейший эмитент стейблкоинов, готовит запуск открытой ИИ-платформы. Как сообщил CEO Паоло Ардоино в соцсетях, система будет работать на любом устройстве без API-ключей и централизованных узлов, принимая платежи в биткоинах и USDT. Это решение может стать альтернативой для регионов с ограниченным доступом к фиатным банкам. Пока детали ИИ-платформы раскрыты частично, но цель амбициозна: проект планирует интеграцию криптовалют в повседневные технологии.
Параллельно Tether планирует выпустить новый стейблкоин, привязанный к доллару, для рынка США — при условии одобрения закона GENIUS Act.
pymnts.com
Anthropic анонсировала новую инициативу "AI for Science", которая поможет ускорить научные исследования через предоставление бесплатных API-кредитов. Программа ориентирована на биологию и науки о жизни.
Участвовать могут исследователи из научных учреждений. Заявки отберут по потенциалу проекта, его влиянию и роли ИИ в ускорении работы. Приоритет получат работы по геномике или борьбе с крупными заболеваниями. Податься можно через специальную форму, а решения будет принимать команда Anthropic с привлечением экспертов.
anthropic.com
Концепция Societal AI — это подход к разработке ИИ, который учитывает влияние технологий на общество. Основная цель: создание систем, отвечающих потребностям здравоохранения, образования и госуслуг, а также минимизация рисков вроде поляризации мнений.
Проект выделяет 3 принципа: гармония (снижение конфликтов), синергия (усиление человеческих возможностей) и устойчивость (адаптивность к изменениям). Особое внимание уделено 10 ключевым вопросам от этического выравнивания ИИ до трансформации труда и регуляторных рамок. Подробности — в полной версии документа.
microsoft.com
@ai_machinelearning_big_data
#news #ai #ml
Please open Telegram to view this post
VIEW IN TELEGRAM
🧩 Задача для дата-сайентистов: "Средняя зарплата" (с подвохом)
📖 Описание задачи
У вас есть DataFrame
Результат:
В задаче требуется заполнить пропущенные значения зарплат в каждом отделе медианой зарплаты этого отдела.
Если медиана не может быть рассчитана (например, все значения NaN) — оставить NaN.
Вы пишете следующий код:
✅ Код выполняется без ошибок, но когда вы проверяете результат:
Получаете:
✅ Всё вроде бы верно…
Но через неделю приходит заказчик и говорит:
> «Ты заполнил пропуски, но потом выяснилось, что в реальных данных в одном отделе все зарплаты NaN, а значит медиана не существует.
> А в твоём коде при такой ситуации почему-то появляется 0 вместо NaN!»
📝 Вопросы:
1. Почему появилось 0 (хотя ожидалось NaN)?
2. Как переписать код так, чтобы:
- Если медиана существует → заполнить ею NaN
- Если медиана не существует (все значения NaN) → оставить NaN
---
🎯 Что проверяет задача:
✅ Понимание, как
✅ Понимание, что
✅ Умение работать с группами, где нет данных
---
💡 Подсказка:
Если `x.median()` вернёт `nan`, то `x.fillna(nan)` оставит NaN внутри группы, **но transform может "автоматически" заменить NaN на 0 при сборке результата** (особенность Pandas).
Нужно явно управлять значением медианы, чтобы избежать непредвиденного замещения.
---
✅ Ожидаемое правильное решение:
```python
def fill_with_median_or_nan(x):
med = x.median()
return x.fillna(med if pd.notna(med) else np.nan)
df['salary_filled'] = df.groupby('department')['salary'].transform(fill_with_median_or_nan)
```
Теперь в отделах, где медиана не существует, **NaN останется NaN**, а не превратится в 0.
🔥 Дополнительный подвох (для усложнения):
Что будет, если отдел состоит только из одного сотрудника с NaN?
→ Нужно ли обработать случай, где в отделе всего 1 запись и она NaN?
📝 Вывод:
Эта задача проверяет:
✅ Понимание нюансов заполнения пропусков в Pandas
✅ Внимательность к corner-case ситуациям
✅ Умение работать с группами с частично или полностью отсутствующими данными
🔥 Отличная тренировка внимательности и глубины понимания Pandas!
📖 Описание задачи
У вас есть DataFrame
df
с данными о зарплатах сотрудников компании:
import pandas as pd
data = {
'employee_id': [1, 2, 3, 4, 5, 6],
'department': ['IT', 'IT', 'HR', 'HR', 'Finance', 'Finance'],
'salary': [100000, None, 50000, None, 70000, None]
}
df = pd.DataFrame(data)
print(df)
Результат:
employee_id department salary
0 1 IT 100000.0
1 2 IT NaN
2 3 HR 50000.0
3 4 HR NaN
4 5 Finance 70000.0
5 6 Finance NaN
В задаче требуется заполнить пропущенные значения зарплат в каждом отделе медианой зарплаты этого отдела.
Если медиана не может быть рассчитана (например, все значения NaN) — оставить NaN.
Вы пишете следующий код:
df['salary_filled'] = df.groupby('department')['salary'].transform(lambda x: x.fillna(x.median()))
✅ Код выполняется без ошибок, но когда вы проверяете результат:
print(df)
Получаете:
employee_id department salary salary_filled
0 1 IT 100000.0 100000.0
1 2 IT NaN 100000.0
2 3 HR 50000.0 50000.0
3 4 HR NaN 50000.0
4 5 Finance 70000.0 70000.0
5 6 Finance NaN 70000.0
✅ Всё вроде бы верно…
Но через неделю приходит заказчик и говорит:
> «Ты заполнил пропуски, но потом выяснилось, что в реальных данных в одном отделе все зарплаты NaN, а значит медиана не существует.
> А в твоём коде при такой ситуации почему-то появляется 0 вместо NaN!»
📝 Вопросы:
1. Почему появилось 0 (хотя ожидалось NaN)?
2. Как переписать код так, чтобы:
- Если медиана существует → заполнить ею NaN
- Если медиана не существует (все значения NaN) → оставить NaN
---
🎯 Что проверяет задача:
✅ Понимание, как
median()
работает на пустой серии ✅ Понимание, что
fillna(np.nan)
может привести к замещению на 0 при приведении типов ✅ Умение работать с группами, где нет данных
---
💡 Подсказка:
Если `x.median()` вернёт `nan`, то `x.fillna(nan)` оставит NaN внутри группы, **но transform может "автоматически" заменить NaN на 0 при сборке результата** (особенность Pandas).
Нужно явно управлять значением медианы, чтобы избежать непредвиденного замещения.
✅ Ожидаемое правильное решение:
```python
def fill_with_median_or_nan(x):
med = x.median()
return x.fillna(med if pd.notna(med) else np.nan)
df['salary_filled'] = df.groupby('department')['salary'].transform(fill_with_median_or_nan)
```
Теперь в отделах, где медиана не существует, **NaN останется NaN**, а не превратится в 0.
🔥 Дополнительный подвох (для усложнения):
Что будет, если отдел состоит только из одного сотрудника с NaN?
→ Нужно ли обработать случай, где в отделе всего 1 запись и она NaN?
📝 Вывод:
Эта задача проверяет:
✅ Понимание нюансов заполнения пропусков в Pandas
✅ Внимательность к corner-case ситуациям
✅ Умение работать с группами с частично или полностью отсутствующими данными
🔥 Отличная тренировка внимательности и глубины понимания Pandas!